/*
	Copyright 2008, 2009, 2010 Brightworks, Inc.
	
	This file is part of Language Mentor.
	
	Language Mentor is free software: you can redistribute it and/or modify
	it under the terms of the GNU General Public License as published by
	the Free Software Foundation, either version 3 of the License, or
	(at your option) any later version.
	
	Language Mentor is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	GNU General Public License for more details.
	
	You should have received a copy of the GNU General Public License
	along with Language Mentor.  If not, see <http://www.gnu.org/licenses/>.
*/
package com.langcollab.languagementor.controller
{
	import com.langcollab.languagementor.controller.audio.AudioController;
	import com.langcollab.languagementor.event.Event_ApplicationState;
	import com.langcollab.languagementor.model.MainModel;
	import com.langcollab.languagementor.vo.ModuleVersionVO;
	
	import flash.events.Event;
	
	import mx.collections.ArrayCollection;
	
	import org.swizframework.utils.commands.IEventAwareCommand;

    public class Command_AddOrRemoveSelectedModuleVersion extends Command_Base implements IEventAwareCommand
    {
		[Inject]
		public var audioController:AudioController;
		[Inject]
		public var model:MainModel;
		
        // ****************************************************
        //
        //          Public Methods
        //
        // ****************************************************

		public function Command_AddOrRemoveSelectedModuleVersion()
        {
            super();
        }

		public function execute():void
        {
			audioController.reset();
			var voIndex:int = model.selectedModuleVersionsData.getItemIndex(Event_ApplicationState(event).moduleVersionVO)
			if (voIndex != -1)
			{
				// We're removing
				model.selectedModuleVersionsData.removeItemAt(voIndex);
			}
			else
			{
				// We're adding
				model.selectedModuleVersionsData.addItem(Event_ApplicationState(event).moduleVersionVO);
				//// The next line wouldn't be needed if we created a sort function for selectedModuleVersionsData
				model.selectedModuleVersionsData = model.dataManager.getModuleVersionVOsSortedByNativeLanguageNameFromModuleVersionVOList(model.selectedModuleVersionsData);
			}
			var newModuleVersionIndex:int = model.selectedModuleVersionsData.getItemIndex(model.selectedModuleVersionVO);
			if (newModuleVersionIndex == -1)
				newModuleVersionIndex = 0;
			var e:Event_ApplicationState = new Event_ApplicationState(Event_ApplicationState.CHANGE_CURRENT_MODULE_VERSION_INDEX);
			e.newModuleVersionIndex = newModuleVersionIndex;
			dispatchEvent(e);
        }
    }
}